package com.example.esp8266.Init;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;


import com.example.esp8266.Library.Sql.SqlServer;
import com.example.esp8266.Login.SigninActivity;
import com.example.esp8266.Main.MainActivity;
import com.example.esp8266.R;

import java.sql.SQLException;

@SuppressLint("CustomSplashScreen")
public class SplashActivity extends Activity {

    private String user_name_sql;
    // 定义数组变量来存储收藏设备参数
    String[] collectionDevices = new String[3];
    String TAG = "SQL_Service";
    private static final int SPLASH_TIME_OUT = 1000; // 1 秒延迟时间

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        // 获取 SharedPreferences 对象，如果文件已存在则不创建新文件
        SharedPreferences sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor;
        // 检查是否已存在该文件，如果不存在则创建新文件并初始化参数
        if (!sharedPref.contains("login_state")) {
            Log.i("User_State", "Init user info");
            // 文件中不存在登录状态参数，可以进行相应的初始化操作
            editor = sharedPref.edit();
            editor.putBoolean("login_state", false); // 初始化登录状态参数为 false
            editor.putInt("device_counts", 0); // 初始化设备数量为 0
            editor.putString("user_level", "访客模式"); // 初始化用户等级为默认值
            editor.putString("user_name", "  用户名"); // 初始化用户ID
            editor.putString("password", ""); // 初始化用户密码
            editor.apply();
        }
        if (!sharedPref.contains("collection_1")) {
            Log.i("User_State", "Init Collection");
            // 文件中不存在设备参数，可以进行相应的初始化操作
            editor = sharedPref.edit();
            editor.putString("collection_1", null); // 初始化收藏设备1
            editor.putString("collection_2", null); // 初始化收藏设备2
            editor.putString("collection_3", null); // 初始化收藏设备3
            editor.apply();
        }
        if (!sharedPref.contains("server_ip")) {
            Log.i("User_State", "Init MQTT ADDRESS");
            // 文件中不存在服务器参数，可以进行相应的初始化操作
            editor = sharedPref.edit();
            editor.putString("server_ip", null); // 初始化服务器
            editor.putString("server_port", null); // 初始化服务器地址
            editor.apply();
        }
        if (!sharedPref.contains("Relay_1_Status")) {
            editor = sharedPref.edit();
            editor.putBoolean("Relay_1_Status",false);
            editor.putBoolean("Relay_2_Status",false);
            editor.putBoolean("Relay_3_Status",false);
            editor.putBoolean("Relay_4_Status",false);
            editor.apply();
        }
        // 获取登录状态参数，默认值为 false
        boolean loginState = sharedPref.getBoolean("login_state", false);
        boolean login_error = sharedPref.getBoolean("login_state_error",false);
        user_name_sql = sharedPref.getString("user_name", "  用户名");

        // 通过循环获取收藏设备参数的值
        for (int i = 0; i < 3; i++) {
            collectionDevices[i] = sharedPref.getString("collection_" + (i + 1), null);
        }

        if (loginState)
        {
            Init_var();//获取参数
        }
        else {
            if (login_error)
            {
                Log.e("User_State", "server error");
                // 服务器异常，直接进入主界面，创建一个新的 Intent，从 SplashActivity 跳转到 MainActivity
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish(); // 结束当前 SplashActivity
            }
            else {
                Log.i("User_State", "not login");
                // 创建一个新的 Intent，从 SplashActivity 跳转到 SigninActivity
                Intent intent = new Intent(SplashActivity.this, SigninActivity.class);
                startActivity(intent);
                finish(); // 结束当前 SplashActivity
            }
        }
    }

    private void Init_var() {
        Thread thread = new Thread(() -> {
            SqlServer sql = new SqlServer("test", "Abc123456", "SunXiaoCheng", "117.10.124.2");
            try {
                sql.connect();
                Log.i(TAG, "Connect SQL service!");

                String[] string_search_Array = {"user_level", "Binding_devices_1", "Binding_devices_2", "Binding_devices_3", "Server_ip", "Server_port"};
                String[] string_result_Array = new String[6];

                for (int temp = 0; temp < 6; temp++) {
                    try {
                        String select_result = sql.Select("select " + string_search_Array[temp] + " from [TEST] where user_name='" + user_name_sql + "'", string_search_Array[temp]);
                        string_result_Array[temp] = select_result;
                        Log.i(TAG, "result is: " + select_result);
                    } catch (SQLException e) {
                        Log.e(TAG, "Search SQL service Failed: " + e.getMessage());
                        // Log the error message and stack trace
                    }
                    sql.connect();
                }

                // 查询完成后，在主线程更新参数
                runOnUiThread(new Runnable() {
                    @SuppressLint("SetTextI18n")
                    @Override
                    public void run() {
                        try {
                            int device_counts = 0; // 初始化设备计数为0
                            for (int i = 1; i < 4; i++) { // 遍历第1、2、3位
                                if (string_result_Array[i] != null && !string_result_Array[i].isEmpty()) {
                                    device_counts++; // 如果第1、2、3位有数据，则设备计数加1
                                }
                            }
                            // 获取 SharedPreferences 对象，如果文件已存在则不创建新文件
                            SharedPreferences sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
                            // 更新存储数据
                            SharedPreferences.Editor editor = sharedPref.edit();
                            // 通过循环设置收藏设备参数的值
                            for (int i = 0; i < 3; i++) {
                                if (collectionDevices[i] == null) {
                                    editor.putString("collection_" + (i + 1), string_result_Array[i + 1]);
                                }
                            }
                            editor.putInt("device_counts", device_counts); // 设备数量
                            editor.putString("user_level", string_result_Array[0]); // 用户等级
                            editor.putString("server_ip", string_result_Array[4].trim()); // mqtt地址
                            editor.putString("server_port", string_result_Array[5].trim()); // mqtt端口
                            editor.apply();
                            new Handler().postDelayed(() -> {
                                Toast.makeText(SplashActivity.this, "登录成功，欢迎", Toast.LENGTH_SHORT).show();
                                // 创建一个新的 Intent，从 SplashActivity 跳转到 SigninActivity
                                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                                startActivity(intent);
                                finish(); // 结束当前 SplashActivity
                            }, SPLASH_TIME_OUT);
                        } catch (Exception e) {
                            Log.e(TAG, "Error updating UI: " + e.getMessage());
                            // Log the error message and stack trace
                        }
                    }
                });
            } catch (Exception e) {
                Log.e(TAG, "SplashActivity: Error connecting to SQL service: " + e.getMessage());
                // Log the error message and stack trace
                // 获取 SharedPreferences 对象
                SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("login_state_error", true);
                editor.putInt("device_counts", 0); // 初始化设备数量为 0
                editor.putString("user_level", "访客模式"); // 初始化用户等级为默认值
                editor.putString("password", null); // 初始化用户密码
                editor.putString("server_ip", null); // 初始化服务器
                editor.putString("server_port", null); // 初始化服务器地址
                for (int i = 0; i < 3; i++) {
                    editor.putString("collection_" + (i + 1), null);//初始化绑定设备
                }
                editor.apply();
                Log.e("User_State", "server error");
                // 服务器异常，直接进入主界面，创建一个新的 Intent，从 SplashActivity 跳转到 MainActivity
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish(); // 结束当前 SplashActivity
            }
        });
        thread.start();
    }

}